package io.loli.sc.api; import io.loli.sc.config.Config; import io.loli.util.MD5Util; import java.awt.BorderLayout; import java.awt.GridLayout; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Hashtable; import java.util.List; import java.util.Map; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; import javax.swing.SwingConstants; import org.apache.http.Consts; import org.apache.http.NameValuePair; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.json.JSONException; import org.json.JSONObject; public class ImageCloudAPI extends APITools implements API { private Config config; private String email; private String tokenStr; private Integer id; public ImageCloudAPI() { } public ImageCloudAPI(Config config) { this.config = config; } @Override public String upload(File fileToUpload) throws UploadException { CloseableHttpClient httpclient = HttpClients.createDefault(); HttpPost hp = new HttpPost(UPLOAD_URL); CloseableHttpResponse response = null; String result = null; String token = config.getImageCloudConfig().getToken(); String email = config.getImageCloudConfig().getEmail(); try { MultipartEntityBuilder multiPartEntityBuilder = MultipartEntityBuilder.create(); multiPartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); // 可以直接addBinary multiPartEntityBuilder.addPart("image", new FileBody(fileToUpload, ContentType.create("image/png", Consts.UTF_8), fileToUpload.getName())); multiPartEntityBuilder.setCharset(Consts.UTF_8); // 可以直接addText multiPartEntityBuilder.addPart("token", new StringBody(token, ContentType.create("text/plain", Consts.UTF_8))); multiPartEntityBuilder.addPart("email", new StringBody(email, ContentType.create("text/plain", Consts.UTF_8))); multiPartEntityBuilder.addPart("desc", new StringBody(fileToUpload.getName(), ContentType.create("text/plain", Consts.UTF_8))); hp.setEntity(multiPartEntityBuilder.build()); response = httpclient.execute(hp); result = EntityUtils.toString(response.getEntity()); } catch (IOException e) { throw new UploadException(e); } System.out.println(result); JSONObject obj = new JSONObject(result); return "http://r.loli.io/" + obj.getString("redirectCode"); } private static final String BASE_URL = "http://loli.io/"; private static final String TOKEN_URL = BASE_URL + "api/token"; private static final String UPLOAD_URL = BASE_URL + "api/upload"; @Override public void auth() throws UploadException { Map<String, String> authStr = this.login(null); String email = authStr.get("user"); String passwd = authStr.get("pass"); if (email == null || email.trim().equals("")) { return; } List<NameValuePair> params = new ArrayList<NameValuePair>(); params.addAll(Arrays.asList(new NameValuePair[] { new BasicNameValuePair("email", email), new BasicNameValuePair("password", MD5Util.hash(passwd)) })); String result = post(TOKEN_URL, params); JSONObject obj = new JSONObject(result); try { JSONObject user = obj.getJSONObject("user"); this.id = obj.getInt("id"); this.email = user.getString("email"); this.tokenStr = obj.getString("token"); } catch (JSONException e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, "用户名密码错误"); } } public Hashtable<String, String> login(JFrame frame) { Hashtable<String, String> logininformation = new Hashtable<String, String>(); JPanel panel = new JPanel(new BorderLayout(5, 5)); JPanel label = new JPanel(new GridLayout(0, 1, 2, 2)); label.add(new JLabel("E-Mail", SwingConstants.RIGHT)); label.add(new JLabel("Password", SwingConstants.RIGHT)); panel.add(label, BorderLayout.WEST); JPanel controls = new JPanel(new GridLayout(0, 1, 2, 2)); JTextField username = new JTextField(10); username.requestFocus(); controls.add(username); JPasswordField password = new JPasswordField(10); controls.add(password); panel.add(controls, BorderLayout.CENTER); JOptionPane.showMessageDialog(frame, panel, "login", JOptionPane.QUESTION_MESSAGE); logininformation.put("user", username.getText()); logininformation.put("pass", new String(password.getPassword())); return logininformation; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getTokenStr() { return tokenStr; } public void setTokenStr(String tokenStr) { this.tokenStr = tokenStr; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } }